#ifndef B24C4FBB_9FD9_4AEB_ADA1_FE78C13D4070
#define B24C4FBB_9FD9_4AEB_ADA1_FE78C13D4070

#include <iostream>
#include <signal.h>
#include <cstdint>
#include "tcpServer.hpp"
#include "ThreadPool.hpp"

#define PORT 8080 // 默认端口号

// 应用层
class HttpServer
{
public:
    HttpServer(uint16_t port_ = PORT)
        :port(port_), isStop(false) 
    {}
    ~HttpServer()
    {}
public:
    // void InitHttpServer();
    // void Loop();
    void InitHttpServer()
    {
        // 信号 SIGPIPE 需要进行忽略，如果不忽略，在写入的时候，可能直接崩溃
        signal(SIGPIPE, SIG_IGN);
    }
    void Loop()
    {
        lg(INFO, "Loop Begin...");
        tcpServer *tsvr = tcpServer::GetInstance(port);
        while(!isStop)
        {
            // 让服务器一直循环运行
            struct sockaddr_in peer;
            socklen_t len = sizeof(peer);
            int sock = accept(tsvr->GetListenFd(), (struct sockaddr*)&peer, &len);
            if(sock < 0){
                lg(ERROR, "accept socket fail, accept error: %s", strerror(errno));
                continue;            
            }
            lg(INFO, "Get a new Link....");

            // 接受到连接后，可以在这里处理 HTTP 请求
            // 使用线程池进行任务的派发
            Task task(sock);
            ThreadPool::getInstance()->pushTask(task);
        }
    }
private:
    uint16_t port; // 端口号
    bool isStop; // 是否正在停止
};


#endif /* B24C4FBB_9FD9_4AEB_ADA1_FE78C13D4070 */
